﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data.SqlClient;
using ProjetoDLL.Model;

namespace ProjetoDLL.DAO
{
    public class PedidoDAO : BaseDAO<Pedido>
    {
        private UsuarioDAO uController = new UsuarioDAO();

        public override void Inserir(Pedido obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("INSERT INTO tb_pedido (data_pedido, valor_total, fk_usuario)"+
                " VALUES(\'{0}\',{1},{2})",
                obj.DataPedido.Year+"-"+obj.DataPedido.Month+"-"+obj.DataPedido.Day, obj.ValorTotal, obj.UsuarioPedido.IdUsuario);

            exec_comando(query, conexao);

           
        }

        public override void Atualizar(Pedido obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("UPDATE tb_pedido SET data_pedido={0}, valor_total={1}, fk_usuario={2} WHERE pk_pedido={3}",
                                   obj.DataPedido, obj.ValorTotal, obj.UsuarioPedido.IdUsuario, obj.IdPedido);

            exec_comando(query, conexao);
        }

        public override void Excluir(Pedido obj)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            string query = string.Format("DELETE FROM tb_pedido WHERE pk_pedido = {0}", obj.IdPedido);

            exec_comando(query, conexao);
        }

        public override Pedido RecuperarUm(int chave)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            int fk_usuario = 0;
            string query;
            SqlDataReader dr;

            Pedido pedido = new Pedido();

            query = string.Format("SELECT * FROM tb_pedido WHERE pk_pedido = {0}", chave);

            SqlCommand cmd = new SqlCommand(query, conexao);

            conexao.Open();
            dr = cmd.ExecuteReader();

            if (dr.Read())
            {
                pedido.IdPedido = Convert.ToInt32(dr["pk_pedido"]);
                pedido.DataPedido = Convert.ToDateTime(dr["data_pedido"]);
                pedido.ValorTotal = Convert.ToSingle(dr["valor_total"]);
                fk_usuario = Convert.ToInt32(dr["fk_usuario"]);
            }

            dr.Close();
            conexao.Close();

            pedido.UsuarioPedido = uController.RecuperarUm(fk_usuario);

            return pedido;
        }


        public override List<Pedido> RecuperarTodos()
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            List<int> listaFkUsuario = new List<int>();
            List<Pedido> listaEntidades = new List<Pedido>();
            SqlDataReader dr;
            SqlCommand cmd = new SqlCommand("SELECT * FROM tb_pedido", conexao);
            conexao.Open();
            dr = cmd.ExecuteReader();

            Pedido pedido;

            while (dr.Read())
            {
                pedido = new Pedido();
                pedido.IdPedido = Convert.ToInt32(dr["pk_pedido"]);
                pedido.DataPedido = Convert.ToDateTime(dr["data_pedido"]);
                pedido.ValorTotal = Convert.ToSingle(dr["valor_total"]);
                listaFkUsuario.Add(Convert.ToInt32(dr["fk_usuario"]));
                listaEntidades.Add(pedido);
            }

            dr.Close();
            conexao.Close();

            for (int i = 0; i < listaEntidades.Count; i++)
            {
                listaEntidades[i].UsuarioPedido = uController.RecuperarUm(listaFkUsuario[i]);
            }

            return listaEntidades;
        }





        public  List<Pedido> RecuperarPedidosUsuario(Usuario u)
        {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);

            List<int> listaFkUsuario = new List<int>();
            List<Pedido> listaEntidades = new List<Pedido>();
            SqlDataReader dr;
            SqlCommand cmd = new SqlCommand("SELECT * FROM tb_pedido where fk_usuario = "+(u.IdUsuario.ToString()), conexao);
            conexao.Open();
            dr = cmd.ExecuteReader();

            Pedido pedido;

            while (dr.Read())
            {
                pedido = new Pedido();
                pedido.IdPedido = Convert.ToInt32(dr["pk_pedido"]);
                pedido.DataPedido = Convert.ToDateTime(dr["data_pedido"]);
                pedido.ValorTotal = Convert.ToSingle(dr["valor_total"]);
                listaFkUsuario.Add(Convert.ToInt32(dr["fk_usuario"]));
                listaEntidades.Add(pedido);
            }

            dr.Close();
            conexao.Close();

            for (int i = 0; i < listaEntidades.Count; i++)
            {
                listaEntidades[i].UsuarioPedido = uController.RecuperarUm(listaFkUsuario[i]);
            }

            return listaEntidades;
        }

        public Pedido SincronizarObjeto(Pedido obj) {
            string strConexao = ConfigurationManager.ConnectionStrings["DB_AW2_PROJETO"].ConnectionString;
            SqlConnection conexao = new SqlConnection(strConexao);
            string query = "SELECT pk_pedido from tb_pedido where fk_usuario = " + obj.UsuarioPedido.IdUsuario + " and data_pedido = \'" +
                   obj.DataPedido.Year + "-" + obj.DataPedido.Month + "-" + obj.DataPedido.Day +"\'";

            SqlCommand cmd = new SqlCommand(query, conexao);

            conexao.Open();
            SqlDataReader dr;
            dr = cmd.ExecuteReader();

            if (dr.Read())
            {
                obj.IdPedido = dr.GetInt32(0);

            }
            dr.Close();
            conexao.Close();
            return obj;
        
        }
    }
}
